home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 49 / Amiga Format CD49 (2000-01-17)(Future Publishing)(GB)(Track 1 of 3)[!][issue 2000-02].iso / -serious- / programming / e / lsestuff / patternlist.e < prev    next >
Text File  |  1999-11-29  |  2KB  |  93 lines

  1. OPT MODULE
  2.  
  3. ->hmm.. dont know what the fuck to call this now.. :)
  4. -> was : virtObj
  5.  
  6. MODULE '*nm'
  7. MODULE '*nmList'
  8.  
  9. EXPORT OBJECT patternList OF nmList ; ENDOBJECT
  10.  
  11. EXPORT OBJECT pL_travObj
  12.    node:PTR TO vo_node
  13.    list:PTR TO patternList
  14.    value
  15. ENDOBJECT
  16.  
  17. OBJECT vo_node OF nm
  18.    pattern
  19. ENDOBJECT
  20.  
  21. PROC new(pattern) OF vo_node
  22.    self.pattern := List(ListLen(pattern))
  23.    ListCopy(self.pattern, pattern)
  24. ENDPROC
  25.  
  26. PROC setpattern(pattern) OF vo_node
  27.    DEF newlen
  28.    newlen := ListLen(pattern)
  29.    IF newlen > ListLen(self.pattern)
  30.       DisposeLink(self.pattern)
  31.       self.pattern := List(newlen)
  32.    ENDIF
  33.    ListCopy(self.pattern, pattern)
  34. ENDPROC
  35.  
  36. PROC end() OF vo_node IS DisposeLink(self.pattern)
  37.  
  38. PROC find(vo:PTR TO patternList, pattern)
  39.    DEF n:PTR TO vo_node
  40.    n := vo.first()
  41.    WHILE n
  42.       IF ListCmp(pattern, n.pattern) THEN RETURN n
  43.       n := n.next
  44.    ENDWHILE
  45. ENDPROC NIL
  46.                                                         
  47. PROC chngPat(pattern, pattern2) OF patternList
  48.    DEF n:PTR TO vo_node
  49.    n := find(self, pattern)
  50.    IF n THEN n.setpattern(pattern2)
  51. ENDPROC
  52.  
  53. PROC addPat(pattern) OF patternList
  54.    DEF n:PTR TO vo_node
  55.    n := find(self, pattern)
  56.    IF n = NIL
  57.       NEW n.new(pattern)
  58.       self.addLast(n)
  59.       RETURN TRUE
  60.    ENDIF
  61. ENDPROC NIL
  62.  
  63. PROC remPat(pattern) OF patternList
  64.    DEF n:PTR TO vo_node
  65.    n := find(self, pattern)
  66.    IF n = NIL THEN RETURN NIL
  67.    self.delete(n)
  68. ENDPROC
  69.  
  70. /* calls proc for each nodes pattern that matches */
  71. /* pattern, the nodes pattern ofcource can be longer, */
  72. /* thats the hole point.. :) */
  73. PROC pathTrav(pattern, obj:PTR TO pL_travObj, proc) OF patternList
  74.    DEF n:PTR TO vo_node
  75.    DEF elsize
  76.    obj.list := self
  77.    elsize := ListLen(pattern)
  78.    n := self.first()
  79.    WHILE n
  80.       IF ListCmp(pattern, n.pattern, elsize)
  81.          obj.node := n
  82.          proc(obj)
  83.       ENDIF
  84.       n := n.next
  85.    ENDWHILE
  86. ENDPROC
  87.  
  88. /* more traverse methods here... */
  89.  
  90. PROC private_Methods_From_Here() OF patternList IS EMPTY
  91.  
  92.  
  93.